home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / Tool Chest / Interfaces / UniversalInterfaces 2.1B1 / AIncludes / SCSI.a < prev    next >
Encoding:
Text File  |  1995-04-18  |  40.4 KB  |  1,003 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        SCSI.a
  3. ;
  4. ;    Contains:    SCSI Manager Interfaces.
  5. ;
  6. ;    Version:    Technology:    System 7.5
  7. ;                Package:    Universal Interfaces 2.1ß1 in “MPW Prerelease” on ETO #17
  8. ;
  9. ;    Copyright:    © 1984-1995 by Apple Computer, Inc.
  10. ;                All rights reserved.
  11. ;
  12. ;    Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13. ;                stack.  Include the file and version information (from above)
  14. ;                in the problem description and send to:
  15. ;                    Internet:    apple.bugs@applelink.apple.com
  16. ;                    AppleLink:    APPLE.BUGS
  17. ;
  18. ;
  19.  
  20.     IF &TYPE('__SCSI__') = 'UNDEFINED' THEN
  21. __SCSI__ SET 1
  22.  
  23.  
  24.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  25.     include 'Types.a'
  26.     ENDIF
  27. ;        include 'ConditionalMacros.a'                                ;
  28.  
  29.     IF &TYPE('__MIXEDMODE__') = 'UNDEFINED' THEN
  30.     include 'MixedMode.a'
  31.     ENDIF
  32.  
  33. scInc                            EQU        1
  34. scNoInc                            EQU        2
  35. scAdd                            EQU        3
  36. scMove                            EQU        4
  37. scLoop                            EQU        5
  38. scNop                            EQU        6
  39. scStop                            EQU        7
  40. scComp                            EQU        8
  41.  
  42. ; SCSI Manager errors 
  43. scCommErr                        EQU        2                    ; communications error, operation timeout 
  44. scArbNBErr                        EQU        3                    ; arbitration timeout waiting for not BSY 
  45. scBadParmsErr                    EQU        4                    ; bad parameter or TIB opcode 
  46. scPhaseErr                        EQU        5                    ; SCSI bus not in correct phase for attempted operation 
  47. scCompareErr                    EQU        6                    ; data compare error 
  48. scMgrBusyErr                    EQU        7                    ; SCSI Manager busy  
  49. scSequenceErr                    EQU        8                    ; attempted operation is out of sequence 
  50. scBusTOErr                        EQU        9                    ; CPU bus timeout 
  51. scComplPhaseErr                    EQU        10                    ; SCSI bus wasn't in Status phase 
  52.  
  53. ; Signatures 
  54. sbSIGWord                        EQU        $4552                ; signature word for Block 0 ('ER') 
  55. sbMac                            EQU        1                    ; system type for Mac 
  56. pMapSIG                            EQU        $504D                ; partition map signature ('PM') 
  57. pdSigWord                        EQU        $5453
  58.  
  59. oldPMSigWord                    EQU        pdSigWord
  60. newPMSigWord                    EQU        pMapSIG
  61.  
  62. ; Driver Descriptor Map 
  63. Block0                     RECORD    0
  64. sbSig                     ds.w   1        ; offset: $0 (0)        ; unique value for SCSI block 0 
  65. sbBlkSize                 ds.w   1        ; offset: $2 (2)        ; block size of device 
  66. sbBlkCount                 ds.l   1        ; offset: $4 (4)        ; number of blocks on device 
  67. sbDevType                 ds.w   1        ; offset: $8 (8)        ; device type 
  68. sbDevId                     ds.w   1        ; offset: $A (10)        ; device id 
  69. sbData                     ds.l   1        ; offset: $C (12)        ; not used 
  70. sbDrvrCount                 ds.w   1        ; offset: $10 (16)        ; driver descriptor count 
  71. ddBlock                     ds.l   1        ; offset: $12 (18)        ; 1st driver's starting block 
  72. ddSize                     ds.w   1        ; offset: $16 (22)        ; size of 1st driver (512-byte blks) 
  73. ddType                     ds.w   1        ; offset: $18 (24)        ; system type (1 for Mac+) 
  74. ddPad                     ds.w   243        ; offset: $1A (26)        ; ARRAY[0..242] OF INTEGER; not used 
  75. sizeof                     EQU *            ; size:   $200 (512)
  76.                         ENDR
  77.  
  78. ; typedef struct Block0     Block0
  79. ; Partition Map Entry 
  80. Partition                 RECORD    0
  81. pmSig                     ds.w   1        ; offset: $0 (0)        ; unique value for map entry blk 
  82. pmSigPad                 ds.w   1        ; offset: $2 (2)        ; currently unused 
  83. pmMapBlkCnt                 ds.l   1        ; offset: $4 (4)        ; # of blks in partition map 
  84. pmPyPartStart             ds.l   1        ; offset: $8 (8)        ; physical start blk of partition 
  85. pmPartBlkCnt             ds.l   1        ; offset: $C (12)        ; # of blks in this partition 
  86. pmPartName                 ds.b   32        ; offset: $10 (16)        ; ASCII partition name 
  87. pmParType                 ds.b   32        ; offset: $30 (48)        ; ASCII partition type 
  88. pmLgDataStart             ds.l   1        ; offset: $50 (80)        ; log. # of partition's 1st data blk 
  89. pmDataCnt                 ds.l   1        ; offset: $54 (84)        ; # of blks in partition's data area 
  90. pmPartStatus             ds.l   1        ; offset: $58 (88)        ; bit field for partition status 
  91. pmLgBootStart             ds.l   1        ; offset: $5C (92)        ; log. blk of partition's boot code 
  92. pmBootSize                 ds.l   1        ; offset: $60 (96)        ; number of bytes in boot code 
  93. pmBootAddr                 ds.l   1        ; offset: $64 (100)        ; memory load address of boot code 
  94. pmBootAddr2                 ds.l   1        ; offset: $68 (104)        ; currently unused 
  95. pmBootEntry                 ds.l   1        ; offset: $6C (108)        ; entry point of boot code 
  96. pmBootEntry2             ds.l   1        ; offset: $70 (112)        ; currently unused 
  97. pmBootCksum                 ds.l   1        ; offset: $74 (116)        ; checksum of boot code 
  98. pmProcessor                 ds.b   16        ; offset: $78 (120)        ; ASCII for the processor type 
  99. pmPad                     ds.w   188        ; offset: $88 (136)        ; 512 bytes long currently unused 
  100. sizeof                     EQU *            ; size:   $200 (512)
  101.                         ENDR
  102.  
  103. ; typedef struct Partition     Partition
  104. ; TIB instruction 
  105. SCSIInstr                 RECORD    0
  106. scOpcode                 ds.w   1        ; offset: $0 (0)
  107. scParam1                 ds.l   1        ; offset: $2 (2)
  108. scParam2                 ds.l   1        ; offset: $6 (6)
  109. sizeof                     EQU *            ; size:   $A (10)
  110.                         ENDR
  111.  
  112. ; typedef struct SCSIInstr     SCSIInstr
  113. ;
  114. ; pascal OSErr SCSIReset(void)
  115. ;
  116.     IF ¬ GENERATINGCFM THEN
  117.         Macro
  118.         _SCSIReset
  119.             dc.w     $4267
  120.             dc.w     $A815
  121.         EndM
  122.     ELSE
  123.         IMPORT_CFM_FUNCTION    SCSIReset
  124.     ENDIF
  125.  
  126. ;
  127. ; pascal OSErr SCSIGet(void)
  128. ;
  129.     IF ¬ GENERATINGCFM THEN
  130.         Macro
  131.         _SCSIGet
  132.             move.w    #$0001,-(sp)
  133.             dc.w     $A815
  134.         EndM
  135.     ELSE
  136.         IMPORT_CFM_FUNCTION    SCSIGet
  137.     ENDIF
  138.  
  139. ;
  140. ; pascal OSErr SCSISelect(short targetID)
  141. ;
  142.     IF ¬ GENERATINGCFM THEN
  143.         Macro
  144.         _SCSISelect
  145.             move.w    #$0002,-(sp)
  146.             dc.w     $A815
  147.         EndM
  148.     ELSE
  149.         IMPORT_CFM_FUNCTION    SCSISelect
  150.     ENDIF
  151.  
  152. ;
  153. ; pascal OSErr SCSICmd(Ptr buffer, short count)
  154. ;
  155.     IF ¬ GENERATINGCFM THEN
  156.         Macro
  157.         _SCSICmd
  158.             move.w    #$0003,-(sp)
  159.             dc.w     $A815
  160.         EndM
  161.     ELSE
  162.         IMPORT_CFM_FUNCTION    SCSICmd
  163.     ENDIF
  164.  
  165. ;
  166. ; pascal OSErr SCSIRead(Ptr tibPtr)
  167. ;
  168.     IF ¬ GENERATINGCFM THEN
  169.         Macro
  170.         _SCSIRead
  171.             move.w    #$0005,-(sp)
  172.             dc.w     $A815
  173.         EndM
  174.     ELSE
  175.         IMPORT_CFM_FUNCTION    SCSIRead
  176.     ENDIF
  177.  
  178. ;
  179. ; pascal OSErr SCSIRBlind(Ptr tibPtr)
  180. ;
  181.     IF ¬ GENERATINGCFM THEN
  182.         Macro
  183.         _SCSIRBlind
  184.             move.w    #$0008,-(sp)
  185.             dc.w     $A815
  186.         EndM
  187.     ELSE
  188.         IMPORT_CFM_FUNCTION    SCSIRBlind
  189.     ENDIF
  190.  
  191. ;
  192. ; pascal OSErr SCSIWrite(Ptr tibPtr)
  193. ;
  194.     IF ¬ GENERATINGCFM THEN
  195.         Macro
  196.         _SCSIWrite
  197.             move.w    #$0006,-(sp)
  198.             dc.w     $A815
  199.         EndM
  200.     ELSE
  201.         IMPORT_CFM_FUNCTION    SCSIWrite
  202.     ENDIF
  203.  
  204. ;
  205. ; pascal OSErr SCSIWBlind(Ptr tibPtr)
  206. ;
  207.     IF ¬ GENERATINGCFM THEN
  208.         Macro
  209.         _SCSIWBlind
  210.             move.w    #$0009,-(sp)
  211.             dc.w     $A815
  212.         EndM
  213.     ELSE
  214.         IMPORT_CFM_FUNCTION    SCSIWBlind
  215.     ENDIF
  216.  
  217. ;
  218. ; pascal OSErr SCSIComplete(short *stat, short *message, unsigned long wait)
  219. ;
  220.     IF ¬ GENERATINGCFM THEN
  221.         Macro
  222.         _SCSIComplete
  223.             move.w    #$0004,-(sp)
  224.             dc.w     $A815
  225.         EndM
  226.     ELSE
  227.         IMPORT_CFM_FUNCTION    SCSIComplete
  228.     ENDIF
  229.  
  230. ;
  231. ; pascal short SCSIStat(void)
  232. ;
  233.     IF ¬ GENERATINGCFM THEN
  234.         Macro
  235.         _SCSIStat
  236.             move.w    #$000A,-(sp)
  237.             dc.w     $A815
  238.         EndM
  239.     ELSE
  240.         IMPORT_CFM_FUNCTION    SCSIStat
  241.     ENDIF
  242.  
  243. ;
  244. ; pascal OSErr SCSISelAtn(short targetID)
  245. ;
  246.     IF ¬ GENERATINGCFM THEN
  247.         Macro
  248.         _SCSISelAtn
  249.             move.w    #$000B,-(sp)
  250.             dc.w     $A815
  251.         EndM
  252.     ELSE
  253.         IMPORT_CFM_FUNCTION    SCSISelAtn
  254.     ENDIF
  255.  
  256. ;
  257. ; pascal OSErr SCSIMsgIn(short *message)
  258. ;
  259.     IF ¬ GENERATINGCFM THEN
  260.         Macro
  261.         _SCSIMsgIn
  262.             move.w    #$000C,-(sp)
  263.             dc.w     $A815
  264.         EndM
  265.     ELSE
  266.         IMPORT_CFM_FUNCTION    SCSIMsgIn
  267.     ENDIF
  268.  
  269. ;
  270. ; pascal OSErr SCSIMsgOut(short message)
  271. ;
  272.     IF ¬ GENERATINGCFM THEN
  273.         Macro
  274.         _SCSIMsgOut
  275.             move.w    #$000D,-(sp)
  276.             dc.w     $A815
  277.         EndM
  278.     ELSE
  279.         IMPORT_CFM_FUNCTION    SCSIMsgOut
  280.     ENDIF
  281.  
  282. ;——————————————————————— New SCSI Manager Interface ———————————————————————
  283.  
  284. scsiVERSION                        EQU        43
  285.  
  286. ; SCSI Manager function codes 
  287. SCSINop                            EQU        $00                    ; Execute nothing                                         
  288. SCSIExecIO                        EQU        $01                    ; Execute the specified IO                             
  289. SCSIBusInquiry                    EQU        $03                    ; Get parameters for entire path of HBAs                 
  290. SCSIReleaseQ                    EQU        $04                    ; Release the frozen SIM queue for particular LUN         
  291. SCSIAbortCommand                EQU        $10                    ; Abort the selected Control Block                      
  292. SCSIResetBus                    EQU        $11                    ; Reset the SCSI bus                                      
  293. SCSIResetDevice                    EQU        $12                    ; Reset the SCSI device                                  
  294. SCSITerminateIO                    EQU        $13                    ; Terminate any pending IO                              
  295. SCSIGetVirtualIDInfo            EQU        $80                    ; Find out which bus old ID is on                         
  296. SCSILoadDriver                    EQU        $82                    ; Load a driver for a device ident                     
  297. SCSIOldCall                        EQU        $84                    ; XPT->SIM private call for old-API                     
  298. SCSICreateRefNumXref            EQU        $85                    ; Register a DeviceIdent to drvr RefNum xref             
  299. SCSILookupRefNumXref            EQU        $86                    ; Get DeviceIdent to drvr RefNum xref                     
  300. SCSIRemoveRefNumXref            EQU        $87                    ; Remove a DeviceIdent to drvr RefNum xref             
  301. SCSIRegisterWithNewXPT            EQU        $88                    ; XPT has changed - SIM needs to re-register itself     
  302. vendorUnique                    EQU        $C0                    ; 0xC0 thru 0xFF 
  303.  
  304. ; SCSI Callback Procedure Prototypes 
  305. ; SCSIInterruptPollProcPtr is obsolete (use SCSIInterruptProcPtr) but still here for compatibility 
  306. handshakeDataLength                EQU        8                    ; Handshake data length 
  307. maxCDBLength                    EQU        16                    ; Space for the CDB bytes/pointer 
  308. vendorIDLength                    EQU        16                    ; ASCII string len for Vendor ID  
  309.  
  310. ; Define DeviceIdent structure 
  311. DeviceIdent             RECORD    0
  312. diReserved                 ds.b   1        ; offset: $0 (0)        ; reserved                 
  313. bus                         ds.b   1        ; offset: $1 (1)        ; SCSI - Bus Number        
  314. targetID                 ds.b   1        ; offset: $2 (2)        ; SCSI - Target SCSI ID    
  315. LUN                         ds.b   1        ; offset: $3 (3)        ; SCSI - LUN                  
  316. sizeof                     EQU *            ; size:   $4 (4)
  317.                         ENDR
  318.  
  319. ; typedef struct DeviceIdent  DeviceIdent
  320. ; Command Descriptor Block structure 
  321. ; typedef UInt8             CDB[maxCDBLength]
  322. SGRecord                 RECORD    0
  323. SGAddr                     ds.l   1        ; offset: $0 (0)
  324. SGCount                     ds.l   1        ; offset: $4 (4)
  325. sizeof                     EQU *            ; size:   $8 (8)
  326.                         ENDR
  327.  
  328. ; typedef struct SGRecord     SGRecord
  329. ; SCSI Phases (used by SIMs to support the Original SCSI Manager 
  330.  
  331. kDataOutPhase                    EQU        0                    ; Encoded MSG, C/D, I/O bits 
  332. kDataInPhase                    EQU        1
  333. kCommandPhase                    EQU        2
  334. kStatusPhase                    EQU        3
  335. kPhaseIllegal0                    EQU        4
  336. kPhaseIllegal1                    EQU        5
  337. kMessageOutPhase                EQU        6
  338. kMessageInPhase                    EQU        7
  339. kBusFreePhase                    EQU        8                    ; Additional Phases 
  340. kArbitratePhase                    EQU        9
  341. kSelectPhase                    EQU        10
  342. kMessageInPhaseNACK                EQU        11                    ; Message In Phase with ACK hanging on the bus 
  343.  
  344. SCSIHdr                 RECORD    0
  345. qLink                     ds.l   1        ; offset: $0 (0)
  346. scsiReserved1             ds.w   1        ; offset: $4 (4)
  347. scsiPBLength             ds.w   1        ; offset: $6 (6)
  348. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  349. scsiReserved2             ds.b   1        ; offset: $9 (9)
  350. scsiResult                 ds.w   1        ; offset: $A (10)
  351. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  352. scsiCompletion             ds.l   1        ; offset: $10 (16)
  353. scsiFlags                 ds.l   1        ; offset: $14 (20)
  354. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  355. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  356. scsiReserved3             ds.l   1        ; offset: $20 (32)
  357. sizeof                     EQU *            ; size:   $24 (36)
  358.                         ENDR
  359.  
  360. ; typedef struct SCSIHdr     SCSIHdr
  361. SCSI_PB                 RECORD    0
  362. qLink                     ds.l   1        ; offset: $0 (0)
  363. scsiReserved1             ds.w   1        ; offset: $4 (4)
  364. scsiPBLength             ds.w   1        ; offset: $6 (6)
  365. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  366. scsiReserved2             ds.b   1        ; offset: $9 (9)
  367. scsiResult                 ds.w   1        ; offset: $A (10)
  368. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  369. scsiCompletion             ds.l   1        ; offset: $10 (16)
  370. scsiFlags                 ds.l   1        ; offset: $14 (20)
  371. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  372. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  373. scsiReserved3             ds.l   1        ; offset: $20 (32)
  374. sizeof                     EQU *            ; size:   $24 (36)
  375.                         ENDR
  376.  
  377. ; typedef struct SCSI_PB     SCSI_PB
  378. SCSI_IO                 RECORD    0
  379. qLink                     ds.l   1        ; offset: $0 (0)
  380. scsiReserved1             ds.w   1        ; offset: $4 (4)
  381. scsiPBLength             ds.w   1        ; offset: $6 (6)
  382. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  383. scsiReserved2             ds.b   1        ; offset: $9 (9)
  384. scsiResult                 ds.w   1        ; offset: $A (10)
  385. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  386. scsiCompletion             ds.l   1        ; offset: $10 (16)
  387. scsiFlags                 ds.l   1        ; offset: $14 (20)
  388. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  389. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  390. scsiReserved3             ds.l   1        ; offset: $20 (32)
  391. scsiResultFlags             ds.w   1        ; offset: $24 (36)
  392. scsiReserved3pt5         ds.w   1        ; offset: $26 (38)
  393. scsiDataPtr                 ds.l   1        ; offset: $28 (40)
  394. scsiDataLength             ds.l   1        ; offset: $2C (44)
  395. scsiSensePtr             ds.l   1        ; offset: $30 (48)
  396. scsiSenseLength             ds.b   1        ; offset: $34 (52)
  397. scsiCDBLength             ds.b   1        ; offset: $35 (53)
  398. scsiSGListCount             ds.w   1        ; offset: $36 (54)
  399. scsiReserved4             ds.l   1        ; offset: $38 (56)
  400. scsiSCSIstatus             ds.b   1        ; offset: $3C (60)
  401. scsiSenseResidual         ds.b   1        ; offset: $3D (61)
  402. scsiReserved5             ds.w   1        ; offset: $3E (62)
  403. scsiDataResidual         ds.l   1        ; offset: $40 (64)
  404. scsiCDB                     ds.l   4        ; offset: $44 (68)
  405. scsiTimeout                 ds.l   1        ; offset: $54 (84)
  406. scsiReserved5pt5         ds.l   1        ; offset: $58 (88)
  407. scsiReserved5pt6         ds.w   1        ; offset: $5C (92)
  408. scsiIOFlags                 ds.w   1        ; offset: $5E (94)
  409. scsiTagAction             ds.b   1        ; offset: $60 (96)
  410. scsiReserved6             ds.b   1        ; offset: $61 (97)
  411. scsiReserved7             ds.w   1        ; offset: $62 (98)
  412. scsiSelectTimeout         ds.w   1        ; offset: $64 (100)
  413. scsiDataType             ds.b   1        ; offset: $66 (102)
  414. scsiTransferType         ds.b   1        ; offset: $67 (103)
  415. scsiReserved8             ds.l   1        ; offset: $68 (104)
  416. scsiReserved9             ds.l   1        ; offset: $6C (108)
  417. scsiHandshake             ds.w   8        ; offset: $70 (112)
  418. scsiReserved10             ds.l   1        ; offset: $80 (128)
  419. scsiReserved11             ds.l   1        ; offset: $84 (132)
  420. scsiCommandLink             ds.l   1        ; offset: $88 (136)
  421. scsiSIMpublics             ds.b   8        ; offset: $8C (140)
  422. scsiAppleReserved6         ds.b   8        ; offset: $94 (148)
  423. scsiCurrentPhase         ds.w   1        ; offset: $9C (156)
  424. scsiSelector             ds.w   1        ; offset: $9E (158)
  425. scsiOldCallResult         ds.w   1        ; offset: $A0 (160)
  426. scsiSCSImessage             ds.b   1        ; offset: $A2 (162)
  427. XPTprivateFlags             ds.b   1        ; offset: $A3 (163)
  428. XPTextras                 ds.b   12        ; offset: $A4 (164)
  429. sizeof                     EQU *            ; size:   $B0 (176)
  430.                         ENDR
  431.  
  432. ; typedef struct SCSI_IO     SCSI_IO
  433. ; typedef SCSI_IO             SCSIExecIOPB
  434. ; Bus inquiry PB 
  435. SCSIBusInquiryPB         RECORD    0
  436. qLink                     ds.l   1        ; offset: $0 (0)
  437. scsiReserved1             ds.w   1        ; offset: $4 (4)
  438. scsiPBLength             ds.w   1        ; offset: $6 (6)
  439. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  440. scsiReserved2             ds.b   1        ; offset: $9 (9)
  441. scsiResult                 ds.w   1        ; offset: $A (10)
  442. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  443. scsiCompletion             ds.l   1        ; offset: $10 (16)
  444. scsiFlags                 ds.l   1        ; offset: $14 (20)
  445. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  446. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  447. scsiReserved3             ds.l   1        ; offset: $20 (32)
  448. scsiEngineCount             ds.w   1        ; offset: $24 (36)        ; <- Number of engines on HBA                         
  449. scsiMaxTransferType         ds.w   1        ; offset: $26 (38)        ; <- Number of transfer types for this HBA            
  450. scsiDataTypes             ds.l   1        ; offset: $28 (40)        ; <- which data types are supported by this SIM     
  451. scsiIOpbSize             ds.w   1        ; offset: $2C (44)        ; <- Size of SCSI_IO PB for this SIM/HBA             
  452. scsiMaxIOpbSize             ds.w   1        ; offset: $2E (46)        ; <- Size of max SCSI_IO PB for all SIM/HBAs         
  453. scsiFeatureFlags         ds.l   1        ; offset: $30 (48)        ; <- Supported features flags field                 
  454. scsiVersionNumber         ds.b   1        ; offset: $34 (52)        ; <- Version number for the SIM/HBA                 
  455. scsiHBAInquiry             ds.b   1        ; offset: $35 (53)        ; <- Mimic of INQ byte 7 for the HBA                 
  456. scsiTargetModeFlags         ds.b   1        ; offset: $36 (54)        ; <- Flags for target mode support                 
  457. scsiScanFlags             ds.b   1        ; offset: $37 (55)        ; <- Scan related feature flags                     
  458. scsiSIMPrivatesPtr         ds.l   1        ; offset: $38 (56)        ; <- Ptr to SIM private data area                     
  459. scsiSIMPrivatesSize         ds.l   1        ; offset: $3C (60)        ; <- Size of SIM private data area                 
  460. scsiAsyncFlags             ds.l   1        ; offset: $40 (64)        ; <- Event cap. for Async Callback                 
  461. scsiHiBusID                 ds.b   1        ; offset: $44 (68)        ; <- Highest path ID in the subsystem              
  462. scsiInitiatorID             ds.b   1        ; offset: $45 (69)        ; <- ID of the HBA on the SCSI bus                 
  463. scsiBIReserved0             ds.w   1        ; offset: $46 (70)        ;                                                    
  464. scsiBIReserved1             ds.l   1        ; offset: $48 (72)        ; <-                                                  
  465. scsiFlagsSupported         ds.l   1        ; offset: $4C (76)        ; <- which scsiFlags are supported                 
  466. scsiIOFlagsSupported     ds.w   1        ; offset: $50 (80)        ; <- which scsiIOFlags are supported                 
  467. scsiWeirdStuff             ds.w   1        ; offset: $52 (82)        ; <-                                                 
  468. scsiMaxTarget             ds.w   1        ; offset: $54 (84)        ; <- maximum Target number supported                 
  469. scsiMaxLUN                 ds.w   1        ; offset: $56 (86)        ; <- maximum Logical Unit number supported         
  470. scsiSIMVendor             ds.b   16        ; offset: $58 (88)        ; <- Vendor ID of SIM (or XPT if bus<FF)         
  471. scsiHBAVendor             ds.b   16        ; offset: $68 (104)        ; <- Vendor ID of the HBA                         
  472. scsiControllerFamily     ds.b   16        ; offset: $78 (120)        ; <- Family of SCSI Controller                 
  473. scsiControllerType         ds.b   16        ; offset: $88 (136)        ; <- Specific Model of SCSI Controller used     
  474. scsiXPTversion             ds.b   4        ; offset: $98 (152)        ; <- version number of XPT                         
  475. scsiSIMversion             ds.b   4        ; offset: $9C (156)        ; <- version number of SIM                         
  476. scsiHBAversion             ds.b   4        ; offset: $A0 (160)        ; <- version number of HBA                         
  477. scsiHBAslotType             ds.b   1        ; offset: $A4 (164)        ; <- type of "slot" that this HBA is in            
  478. scsiHBAslotNumber         ds.b   1        ; offset: $A5 (165)        ; <- slot number of this HBA                         
  479. scsiSIMsRsrcID             ds.w   1        ; offset: $A6 (166)        ; <- resource ID of this SIM                         
  480. scsiBIReserved3             ds.w   1        ; offset: $A8 (168)        ; <-                                                 
  481. scsiAdditionalLength     ds.w   1        ; offset: $AA (170)        ; <- additional BusInquiry PB len                    
  482. sizeof                     EQU *            ; size:   $AC (172)
  483.                         ENDR
  484.  
  485. ; typedef struct SCSIBusInquiryPB  SCSIBusInquiryPB
  486. ; Abort SIM Request PB 
  487. SCSIAbortCommandPB         RECORD    0
  488. qLink                     ds.l   1        ; offset: $0 (0)
  489. scsiReserved1             ds.w   1        ; offset: $4 (4)
  490. scsiPBLength             ds.w   1        ; offset: $6 (6)
  491. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  492. scsiReserved2             ds.b   1        ; offset: $9 (9)
  493. scsiResult                 ds.w   1        ; offset: $A (10)
  494. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  495. scsiCompletion             ds.l   1        ; offset: $10 (16)
  496. scsiFlags                 ds.l   1        ; offset: $14 (20)
  497. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  498. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  499. scsiReserved3             ds.l   1        ; offset: $20 (32)
  500. scsiIOptr                 ds.l   1        ; offset: $24 (36)        ; Pointer to the PB to abort                        
  501. sizeof                     EQU *            ; size:   $28 (40)
  502.                         ENDR
  503.  
  504. ; typedef struct SCSIAbortCommandPB  SCSIAbortCommandPB
  505. ; Terminate I/O Process Request PB 
  506. SCSITerminateIOPB         RECORD    0
  507. qLink                     ds.l   1        ; offset: $0 (0)
  508. scsiReserved1             ds.w   1        ; offset: $4 (4)
  509. scsiPBLength             ds.w   1        ; offset: $6 (6)
  510. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  511. scsiReserved2             ds.b   1        ; offset: $9 (9)
  512. scsiResult                 ds.w   1        ; offset: $A (10)
  513. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  514. scsiCompletion             ds.l   1        ; offset: $10 (16)
  515. scsiFlags                 ds.l   1        ; offset: $14 (20)
  516. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  517. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  518. scsiReserved3             ds.l   1        ; offset: $20 (32)
  519. scsiIOptr                 ds.l   1        ; offset: $24 (36)        ; Pointer to the PB to terminate                     
  520. sizeof                     EQU *            ; size:   $28 (40)
  521.                         ENDR
  522.  
  523. ; typedef struct SCSITerminateIOPB  SCSITerminateIOPB
  524. ; Reset SCSI Bus PB 
  525. SCSIResetBusPB             RECORD    0
  526. qLink                     ds.l   1        ; offset: $0 (0)
  527. scsiReserved1             ds.w   1        ; offset: $4 (4)
  528. scsiPBLength             ds.w   1        ; offset: $6 (6)
  529. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  530. scsiReserved2             ds.b   1        ; offset: $9 (9)
  531. scsiResult                 ds.w   1        ; offset: $A (10)
  532. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  533. scsiCompletion             ds.l   1        ; offset: $10 (16)
  534. scsiFlags                 ds.l   1        ; offset: $14 (20)
  535. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  536. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  537. scsiReserved3             ds.l   1        ; offset: $20 (32)
  538. sizeof                     EQU *            ; size:   $24 (36)
  539.                         ENDR
  540.  
  541. ; typedef struct SCSIResetBusPB  SCSIResetBusPB
  542. ; Reset SCSI Device PB 
  543. SCSIResetDevicePB         RECORD    0
  544. qLink                     ds.l   1        ; offset: $0 (0)
  545. scsiReserved1             ds.w   1        ; offset: $4 (4)
  546. scsiPBLength             ds.w   1        ; offset: $6 (6)
  547. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  548. scsiReserved2             ds.b   1        ; offset: $9 (9)
  549. scsiResult                 ds.w   1        ; offset: $A (10)
  550. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  551. scsiCompletion             ds.l   1        ; offset: $10 (16)
  552. scsiFlags                 ds.l   1        ; offset: $14 (20)
  553. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  554. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  555. scsiReserved3             ds.l   1        ; offset: $20 (32)
  556. sizeof                     EQU *            ; size:   $24 (36)
  557.                         ENDR
  558.  
  559. ; typedef struct SCSIResetDevicePB  SCSIResetDevicePB
  560. ; Release SIM Queue PB 
  561. SCSIReleaseQPB             RECORD    0
  562. qLink                     ds.l   1        ; offset: $0 (0)
  563. scsiReserved1             ds.w   1        ; offset: $4 (4)
  564. scsiPBLength             ds.w   1        ; offset: $6 (6)
  565. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  566. scsiReserved2             ds.b   1        ; offset: $9 (9)
  567. scsiResult                 ds.w   1        ; offset: $A (10)
  568. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  569. scsiCompletion             ds.l   1        ; offset: $10 (16)
  570. scsiFlags                 ds.l   1        ; offset: $14 (20)
  571. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  572. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  573. scsiReserved3             ds.l   1        ; offset: $20 (32)
  574. sizeof                     EQU *            ; size:   $24 (36)
  575.                         ENDR
  576.  
  577. ; typedef struct SCSIReleaseQPB  SCSIReleaseQPB
  578. ; SCSI Get Virtual ID Info PB 
  579. SCSIGetVirtualIDInfoPB     RECORD    0
  580. qLink                     ds.l   1        ; offset: $0 (0)
  581. scsiReserved1             ds.w   1        ; offset: $4 (4)
  582. scsiPBLength             ds.w   1        ; offset: $6 (6)
  583. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  584. scsiReserved2             ds.b   1        ; offset: $9 (9)
  585. scsiResult                 ds.w   1        ; offset: $A (10)
  586. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  587. scsiCompletion             ds.l   1        ; offset: $10 (16)
  588. scsiFlags                 ds.l   1        ; offset: $14 (20)
  589. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  590. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  591. scsiReserved3             ds.l   1        ; offset: $20 (32)
  592. scsiOldCallID             ds.w   1        ; offset: $24 (36)        ; -> SCSI ID of device in question             
  593. scsiExists                 ds.b   1        ; offset: $26 (38)        ; <- true if device exists                     
  594. filler                     ds.b   1        ; offset: $27 (39)
  595. sizeof                     EQU *            ; size:   $28 (40)
  596.                         ENDR
  597.  
  598. ; typedef struct SCSIGetVirtualIDInfoPB  SCSIGetVirtualIDInfoPB
  599. ; Create/Lookup/Remove RefNum for Device PB 
  600. SCSIDriverPB             RECORD    0
  601. qLink                     ds.l   1        ; offset: $0 (0)
  602. scsiReserved1             ds.w   1        ; offset: $4 (4)
  603. scsiPBLength             ds.w   1        ; offset: $6 (6)
  604. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  605. scsiReserved2             ds.b   1        ; offset: $9 (9)
  606. scsiResult                 ds.w   1        ; offset: $A (10)
  607. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  608. scsiCompletion             ds.l   1        ; offset: $10 (16)
  609. scsiFlags                 ds.l   1        ; offset: $14 (20)
  610. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  611. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  612. scsiReserved3             ds.l   1        ; offset: $20 (32)
  613. scsiDriver                 ds.w   1        ; offset: $24 (36)        ; -> DriverRefNum, For SetDriver, <- For GetNextDriver 
  614. scsiDriverFlags             ds.w   1        ; offset: $26 (38)        ; <> Details of driver/device                     
  615. scsiNextDevice             ds     DeviceIdent ; offset: $28 (40)    ; <- DeviceIdent of the NEXT Item in the list  
  616. sizeof                     EQU *            ; size:   $2C (44)
  617.                         ENDR
  618.  
  619. ; typedef struct SCSIDriverPB  SCSIDriverPB
  620. ; Load Driver PB 
  621. SCSILoadDriverPB         RECORD    0
  622. qLink                     ds.l   1        ; offset: $0 (0)
  623. scsiReserved1             ds.w   1        ; offset: $4 (4)
  624. scsiPBLength             ds.w   1        ; offset: $6 (6)
  625. scsiFunctionCode         ds.b   1        ; offset: $8 (8)
  626. scsiReserved2             ds.b   1        ; offset: $9 (9)
  627. scsiResult                 ds.w   1        ; offset: $A (10)
  628. scsiDevice                 ds     DeviceIdent ; offset: $C (12)
  629. scsiCompletion             ds.l   1        ; offset: $10 (16)
  630. scsiFlags                 ds.l   1        ; offset: $14 (20)
  631. scsiDriverStorage         ds.l   1        ; offset: $18 (24)
  632. scsiXPTprivate             ds.l   1        ; offset: $1C (28)
  633. scsiReserved3             ds.l   1        ; offset: $20 (32)
  634. scsiLoadedRefNum         ds.w   1        ; offset: $24 (36)        ; <- SIM returns refnum of driver                     
  635. scsiDiskLoadFailed         ds.b   1        ; offset: $26 (38)        ; -> if true, indicates call after failure to load 
  636. filler                     ds.b   1        ; offset: $27 (39)
  637. sizeof                     EQU *            ; size:   $28 (40)
  638.                         ENDR
  639.  
  640. ; typedef struct SCSILoadDriverPB  SCSILoadDriverPB
  641. ; Defines for the scsiTransferType field 
  642.  
  643. scsiTransferBlind                EQU        0
  644. scsiTransferPolled                EQU        1
  645.  
  646. ; Defines for the scsiDataType field 
  647. scsiDataBuffer                    EQU        0                    ; single contiguous buffer supplied                  
  648. scsiDataTIB                        EQU        1                    ; TIB supplied (ptr in scsiDataPtr)                 
  649. scsiDataSG                        EQU        2                    ; scatter/gather list supplied                      
  650.  
  651. ; Defines for the SCSIMgr scsiResult field in the PB header. 
  652. ;  $E100 thru  E1FF 
  653. ; -$1EFF thru -1E00 
  654. ; -#7935 thru -7681  
  655. ; = 0xE100 
  656. scsiErrorBase                    EQU        -7936
  657.  
  658. scsiRequestInProgress            EQU        1                    ; 1     = PB request is in progress             
  659. ; Execution failed  00-2F 
  660. scsiRequestAborted                EQU        scsiErrorBase + 2    ; -7934 = PB request aborted by the host         
  661. scsiUnableToAbort                EQU        scsiErrorBase + 3    ; -7933 = Unable to Abort PB request             
  662. scsiNonZeroStatus                EQU        scsiErrorBase + 4    ; -7932 = PB request completed with an err     
  663. scsiUnused05                    EQU        scsiErrorBase + 5    ; -7931 =                                      
  664. scsiUnused06                    EQU        scsiErrorBase + 6    ; -7930 =                                      
  665. scsiUnused07                    EQU        scsiErrorBase + 7    ; -7929 =                                      
  666. scsiUnused08                    EQU        scsiErrorBase + 8    ; -7928 =                                      
  667. scsiUnableToTerminate            EQU        scsiErrorBase + 9    ; -7927 = Unable to Terminate I/O PB req         
  668. scsiSelectTimeout                EQU        scsiErrorBase + 10    ; -7926 = Target selection timeout             
  669. scsiCommandTimeout                EQU        scsiErrorBase + 11    ; -7925 = Command timeout                      
  670. scsiIdentifyMessageRejected        EQU        scsiErrorBase + 12    ; -7924 =                                      
  671. scsiMessageRejectReceived        EQU        scsiErrorBase + 13    ; -7923 = Message reject received                 
  672. scsiSCSIBusReset                EQU        scsiErrorBase + 14    ; -7922 = SCSI bus reset sent/received         
  673. scsiParityError                    EQU        scsiErrorBase + 15    ; -7921 = Uncorrectable parity error occured     
  674. scsiAutosenseFailed                EQU        scsiErrorBase + 16    ; -7920 = Autosense: Request sense cmd fail     
  675. scsiUnused11                    EQU        scsiErrorBase + 17    ; -7919 =                                      
  676. scsiDataRunError                EQU        scsiErrorBase + 18    ; -7918 = Data overrun/underrun error          
  677. scsiUnexpectedBusFree            EQU        scsiErrorBase + 19    ; -7917 = Unexpected BUS free                     
  678. scsiSequenceFailed                EQU        scsiErrorBase + 20    ; -7916 = Target bus phase sequence failure     
  679. scsiWrongDirection                EQU        scsiErrorBase + 21    ; -7915 = Data phase was in wrong direction     
  680. scsiUnused16                    EQU        scsiErrorBase + 22    ; -7914 =                                      
  681. scsiBDRsent                        EQU        scsiErrorBase + 23    ; -7913 = A SCSI BDR msg was sent to target     
  682. scsiTerminated                    EQU        scsiErrorBase + 24    ; -7912 = PB request terminated by the host     
  683. scsiNoNexus                        EQU        scsiErrorBase + 25    ; -7911 = Nexus is not established             
  684. scsiCDBReceived                    EQU        scsiErrorBase + 26    ; -7910 = The SCSI CDB has been received         
  685. ; Couldn't begin execution  30-3F 
  686. scsiTooManyBuses                EQU        scsiErrorBase + 48    ; -7888 = Register failed because we're full    
  687. scsiBusy                        EQU        scsiErrorBase + 49    ; -7887 = SCSI subsystem is busy                 
  688. scsiProvideFail                    EQU        scsiErrorBase + 50    ; -7886 = Unable to provide requ. capability    
  689. scsiDeviceNotThere                EQU        scsiErrorBase + 51    ; -7885 = SCSI device not installed/there      
  690. scsiNoHBA                        EQU        scsiErrorBase + 52    ; -7884 = No HBA detected Error                 
  691. scsiDeviceConflict                EQU        scsiErrorBase + 53    ; -7883 = sorry, max 1 refNum per DeviceIdent     
  692. scsiNoSuchXref                    EQU        scsiErrorBase + 54    ; -7882 = no such RefNum xref                     
  693. scsiQLinkInvalid                EQU        scsiErrorBase + 55    ; -7881 = pre-linked PBs not supported            
  694. ;                                                                   (The QLink field was nonzero)        
  695. ; Parameter errors  40-7F 
  696. scsiPBLengthError                EQU        scsiErrorBase + 64    ; -7872 = (scsiPBLength is insuf'ct/invalid     
  697. scsiFunctionNotAvailable        EQU        scsiErrorBase + 65    ; -7871 = The requ. func is not available      
  698. scsiRequestInvalid                EQU        scsiErrorBase + 66    ; -7870 = PB request is invalid                 
  699. scsiBusInvalid                    EQU        scsiErrorBase + 67    ; -7869 = Bus ID supplied is invalid              
  700. scsiTIDInvalid                    EQU        scsiErrorBase + 68    ; -7868 = Target ID supplied is invalid         
  701. scsiLUNInvalid                    EQU        scsiErrorBase + 69    ; -7867 = LUN supplied is invalid              
  702. scsiIDInvalid                    EQU        scsiErrorBase + 70    ; -7866 = The initiator ID is invalid          
  703. scsiDataTypeInvalid                EQU        scsiErrorBase + 71    ; -7865 = scsiDataType requested not supported 
  704. scsiTransferTypeInvalid            EQU        scsiErrorBase + 72    ; -7864 = scsiTransferType field is too high     
  705. scsiCDBLengthInvalid            EQU        scsiErrorBase + 73    ; -7863 = scsiCDBLength field is too big         
  706.  
  707. scsiExecutionErrors                EQU        scsiErrorBase
  708. scsiNotExecutedErrors            EQU        scsiTooManyBuses
  709. scsiParameterErrors                EQU        scsiPBLengthError
  710.  
  711. ; Defines for the scsiResultFlags field 
  712. scsiSIMQFrozen                    EQU        $0001                ; The SIM queue is frozen w/this err            
  713. scsiAutosenseValid                EQU        $0002                ; Autosense data valid for target              
  714. scsiBusNotFree                    EQU        $0004                ; At time of callback, SCSI bus is not free    
  715.  
  716. ; Defines for the bit numbers of the scsiFlags field in the PB header for the SCSIExecIO function 
  717. kbSCSIDisableAutosense            EQU        29                    ; Disable auto sense feature                     
  718. kbSCSIFlagReservedA                EQU        28                    ;                                              
  719. kbSCSIFlagReserved0                EQU        27                    ;                                              
  720. kbSCSICDBLinked                    EQU        26                    ; The PB contains a linked CDB                    
  721. kbSCSIQEnable                    EQU        25                    ; Target queue actions are enabled                
  722. kbSCSICDBIsPointer                EQU        24                    ; The CDB field contains a pointer                
  723. kbSCSIFlagReserved1                EQU        23                    ;                                                 
  724. kbSCSIInitiateSyncData            EQU        22                    ; Attempt Sync data xfer and SDTR                
  725. kbSCSIDisableSyncData            EQU        21                    ; Disable sync, go to async                    
  726. kbSCSISIMQHead                    EQU        20                    ; Place PB at the head of SIM Q                
  727. kbSCSISIMQFreeze                EQU        19                    ; Return the SIM Q to frozen state                
  728. kbSCSISIMQNoFreeze                EQU        18                    ; Disallow SIM Q freezing                        
  729. kbSCSIDoDisconnect                EQU        17                    ; Definitely do disconnect                        
  730. kbSCSIDontDisconnect            EQU        16                    ; Definitely don't disconnect                    
  731. kbSCSIDataReadyForDMA            EQU        15                    ; Data buffer(s) are ready for DMA                
  732. kbSCSIFlagReserved3                EQU        14                    ;                                                 
  733. kbSCSIDataPhysical                EQU        13                    ; SG/Buffer data ptrs are physical                
  734. kbSCSISensePhysical                EQU        12                    ; Autosense buffer ptr is physical                
  735. kbSCSIFlagReserved5                EQU        11                    ;                                                 
  736. kbSCSIFlagReserved6                EQU        10                    ;                                                 
  737. kbSCSIFlagReserved7                EQU        9                    ;                                                 
  738. kbSCSIFlagReserved8                EQU        8                    ;                                                 
  739. kbSCSIDataBufferValid            EQU        7                    ; Data buffer valid                            
  740. kbSCSIStatusBufferValid            EQU        6                    ; Status buffer valid                             
  741. kbSCSIMessageBufferValid        EQU        5                    ; Message buffer valid                            
  742. kbSCSIFlagReserved9                EQU        4                    ;                                              
  743.  
  744. ; Defines for the bit masks of the scsiFlags field 
  745. scsiDirectionMask                EQU        $C0000000            ; Data direction mask                        
  746. scsiDirectionNone                EQU        $C0000000            ; Data direction (11: no data)                
  747. scsiDirectionReserved            EQU        $00000000            ; Data direction (00: reserved)            
  748. scsiDirectionOut                EQU        $80000000            ; Data direction (10: DATA OUT)            
  749. scsiDirectionIn                    EQU        $40000000            ; Data direction (01: DATA IN)                
  750. scsiDisableAutosense            EQU        $20000000            ; Disable auto sense feature                
  751. scsiFlagReservedA                EQU        $10000000            ;                                             
  752. scsiFlagReserved0                EQU        $08000000            ;                                             
  753. scsiCDBLinked                    EQU        $04000000            ; The PB contains a linked CDB                
  754. scsiQEnable                        EQU        $02000000            ; Target queue actions are enabled            
  755. scsiCDBIsPointer                EQU        $01000000            ; The CDB field contains a pointer            
  756. scsiFlagReserved1                EQU        $00800000            ;                                             
  757. scsiInitiateSyncData            EQU        $00400000            ; Attempt Sync data xfer and SDTR            
  758. scsiDisableSyncData                EQU        $00200000            ; Disable sync, go to async                
  759. scsiSIMQHead                    EQU        $00100000            ; Place PB at the head of SIM Q            
  760. scsiSIMQFreeze                    EQU        $00080000            ; Return the SIM Q to frozen state            
  761. scsiSIMQNoFreeze                EQU        $00040000            ; Disallow SIM Q freezing                    
  762. scsiDoDisconnect                EQU        $00020000            ; Definitely do disconnect                    
  763. scsiDontDisconnect                EQU        $00010000            ; Definitely don't disconnect                
  764. scsiDataReadyForDMA                EQU        $00008000            ; Data buffer(s) are ready for DMA            
  765. scsiFlagReserved3                EQU        $00004000            ;  
  766. scsiDataPhysical                EQU        $00002000            ; SG/Buffer data ptrs are physical            
  767. scsiSensePhysical                EQU        $00001000            ; Autosense buffer ptr is physical            
  768. scsiFlagReserved5                EQU        $00000800            ;                                          
  769. scsiFlagReserved6                EQU        $00000400            ;                                             
  770. scsiFlagReserved7                EQU        $00000200            ;                                             
  771. scsiFlagReserved8                EQU        $00000100            ;                                             
  772.  
  773. ; bit masks for the scsiIOFlags field in SCSIExecIOPB 
  774. scsiNoParityCheck                EQU        $0002                ; disable parity checking                             
  775. scsiDisableSelectWAtn            EQU        $0004                ; disable select w/Atn                              
  776. scsiSavePtrOnDisconnect            EQU        $0008                ; do SaveDataPointer upon Disconnect msg             
  777. scsiNoBucketIn                    EQU        $0010                ; don’t bit bucket in during this I/O                 
  778. scsiNoBucketOut                    EQU        $0020                ; don’t bit bucket out during this I/O             
  779. scsiDisableWide                    EQU        $0040                ; disable wide transfer negotiation                 
  780. scsiInitiateWide                EQU        $0080                ; initiate wide transfer negotiation                 
  781. scsiRenegotiateSense            EQU        $0100                ; renegotiate sync/wide before issuing autosense     
  782. scsiDisableDiscipline            EQU        $0200                ; disable parameter checking on SCSIExecIO calls    
  783. scsiIOFlagReserved0080            EQU        $0080                ;                                                  
  784. scsiIOFlagReserved8000            EQU        $8000                ;                                                     
  785.  
  786. ; Defines for the SIM/HBA queue actions.  These values are used in the 
  787. ; SCSIExecIOPB, for the queue action field. [These values should match the 
  788. ; defines from some other include file for the SCSI message phases.  We may 
  789. ; not need these definitions here. ] 
  790. scsiSimpleQTag                    EQU        $20                    ; Tag for a simple queue                                 
  791. scsiHeadQTag                    EQU        $21                    ; Tag for head of queue                                  
  792. scsiOrderedQTag                    EQU        $22                    ; Tag for ordered queue                                 
  793.  
  794. ; Defines for the Bus Inquiry PB fields. 
  795. ; scsiHBAInquiry field bits 
  796. scsiBusMDP                        EQU        $80                    ; Supports Modify Data Pointer message                        
  797. scsiBusWide32                    EQU        $40                    ; Supports 32 bit wide SCSI                                
  798. scsiBusWide16                    EQU        $20                    ; Supports 16 bit wide SCSI                                
  799. scsiBusSDTR                        EQU        $10                    ; Supports Sync Data Transfer Req message                    
  800. scsiBusLinkedCDB                EQU        $08                    ; Supports linked CDBs                                        
  801. scsiBusTagQ                        EQU        $02                    ; Supports tag queue message                                
  802. scsiBusSoftReset                EQU        $01                    ; Supports soft reset                                        
  803.  
  804. ; scsiDataTypes field bits  
  805. ;    bits 0->15 Apple-defined, 16->30 3rd-party unique, 31 = reserved 
  806. scsiBusDataTIB                    EQU        (1 << scsiDataTIB)    ; TIB supplied (ptr in scsiDataPtr)        
  807. scsiBusDataBuffer                EQU        (1 << scsiDataBuffer) ; single contiguous buffer supplied         
  808. scsiBusDataSG                    EQU        (1 << scsiDataSG)    ; scatter/gather list supplied             
  809. scsiBusDataReserved                EQU        $80000000            ;                                           
  810.  
  811. ; scsiScanFlags field bits 
  812. scsiBusScansDevices                EQU        $80                    ; Bus scans for and maintains device list            
  813. scsiBusScansOnInit                EQU        $40                    ; Bus scans performed at power-up/reboot            
  814. scsiBusLoadsROMDrivers            EQU        $20                    ; may load ROM drivers to support targets             
  815.  
  816. ; scsiFeatureFlags field bits 
  817. scsiBusInternalExternalMask        EQU        $000000C0            ; bus internal/external mask                    
  818. scsiBusInternalExternalUnknown    EQU        $00000000            ; not known whether bus is inside or outside     
  819. scsiBusInternalExternal            EQU        $000000C0            ; bus goes inside and outside the box             
  820. scsiBusInternal                    EQU        $00000080            ; bus goes inside the box                         
  821. scsiBusExternal                    EQU        $00000040            ; bus goes outside the box                     
  822. scsiBusCacheCoherentDMA            EQU        $00000020            ; DMA is cache coherent                         
  823. scsiBusOldCallCapable            EQU        $00000010            ; SIM is old call capable                         
  824. scsiBusDifferential                EQU        $00000004            ; Single Ended (0) or Differential (1)         
  825. scsiBusFastSCSI                    EQU        $00000002            ; HBA supports fast SCSI                         
  826. scsiBusDMAavailable                EQU        $00000001            ; DMA is available                             
  827.  
  828. ; scsiWeirdStuff field bits 
  829. scsiOddDisconnectUnsafeRead1    EQU        $0001                ; Disconnects on odd byte boundries are unsafe with DMA and/or blind reads 
  830. scsiOddDisconnectUnsafeWrite1    EQU        $0002                ; Disconnects on odd byte boundries are unsafe with DMA and/or blind writes 
  831. scsiBusErrorsUnsafe                EQU        $0004                ; Non-handshaked delays or disconnects during blind transfers may cause a crash 
  832. scsiRequiresHandshake            EQU        $0008                ; Non-handshaked delays or disconnects during blind transfers may cause data corruption 
  833. scsiTargetDrivenSDTRSafe        EQU        $0010                ; Targets which initiate synchronous negotiations are supported 
  834.  
  835. ; scsiHBAslotType values 
  836. scsiMotherboardBus                EQU        $01                    ; A built in Apple supplied bus                     
  837. scsiNuBus                        EQU        $02                    ; A SIM on a NuBus card                             
  838. scsiPDSBus                        EQU        $03                    ;    "  on a PDS card                                
  839. scsiPCIBus                        EQU        $04                    ;    "  on a PCI bus card                            
  840. scsiPCMCIABus                    EQU        $05                    ;    "  on a PCMCIA card                            
  841. scsiFireWireBridgeBus            EQU        $06                    ;    "  connected through a FireWire bridge        
  842.  
  843. ; Defines for the scsiDriverFlags field (in SCSIDriverPB) 
  844. scsiDeviceSensitive                EQU        $0001                ; Only driver should access this device                
  845. scsiDeviceNoOldCallAccess        EQU        $0002                ; no old call access to this device                     
  846.  
  847. ;  SIMInitInfo PB 
  848. ; directions are for SCSIRegisterBus call ( -> parm, <- result)             
  849. SIMInitInfo             RECORD    0
  850. SIMstaticPtr             ds.l   1        ; offset: $0 (0)        ; <- alloc. ptr to the SIM's static vars                 
  851. staticSize                 ds.l   1        ; offset: $4 (4)        ; -> num bytes SIM needs for static vars                 
  852. SIMInit                     ds.l   1        ; offset: $8 (8)        ; -> pointer to the SIM init routine                     
  853. SIMAction                 ds.l   1        ; offset: $C (12)        ; -> pointer to the SIM action routine                 
  854. SIM_ISR                     ds.l   1        ; offset: $10 (16)        ;       reserved                                             
  855. SIMInterruptPoll         ds.l   1        ; offset: $14 (20)        ; -> pointer to the SIM interrupt poll routine            
  856. NewOldCall                 ds.l   1        ; offset: $18 (24)        ; -> pointer to the SIM NewOldCall routine                
  857. ioPBSize                 ds.w   1        ; offset: $1C (28)        ; -> size of SCSI_IO_PBs required for this SIM            
  858. oldCallCapable             ds.b   1        ; offset: $1E (30)        ; -> true if this SIM can handle old-API calls            
  859. simInfoUnused1             ds.b   1        ; offset: $1F (31)        ;       reserved                                            
  860. simInternalUse             ds.l   1        ; offset: $20 (32)        ; xx not affected or viewed by XPT                        
  861. XPT_ISR                     ds.l   1        ; offset: $24 (36)        ;    reserved                                            
  862. EnteringSIM                 ds.l   1        ; offset: $28 (40)        ; <- ptr to the EnteringSIM routine                    
  863. ExitingSIM                 ds.l   1        ; offset: $2C (44)        ; <- ptr to the ExitingSIM routine                        
  864. MakeCallback             ds.l   1        ; offset: $30 (48)        ; <- the XPT layer’s SCSIMakeCallback routine            
  865. busID                     ds.w   1        ; offset: $34 (52)        ; <- bus number for the registered bus                    
  866. simInfoUnused3             ds.w   1        ; offset: $36 (54)        ; <- reserved                                            
  867. simInfoUnused4             ds.l   1        ; offset: $38 (56)        ; <- reserved                                            
  868. sizeof                     EQU *            ; size:   $3C (60)
  869.                         ENDR
  870.  
  871. ; typedef struct SIMInitInfo  SIMInitInfo
  872. ; Glue between SCSI calls and SCSITrap format 
  873.  
  874. xptSCSIAction                    EQU        $0001
  875. xptSCSIRegisterBus                EQU        $0002
  876. xptSCSIDeregisterBus            EQU        $0003
  877. xptSCSIReregisterBus            EQU        $0004
  878. xptSCSIKillXPT                    EQU        $0005                ; kills Mini-XPT after transition 
  879. xptSCSIInitialize                EQU        $000A                ; Initialize the SCSI manager 
  880.  
  881. ; SCSI status
  882. scsiStatGood                    EQU        $00                    ; Good Status
  883. scsiStatCheckCondition            EQU        $02                    ; Check Condition
  884. scsiStatConditionMet            EQU        $04                    ; Condition Met
  885. scsiStatBusy                    EQU        $08                    ; Busy
  886. scsiStatIntermediate            EQU        $10                    ; Intermediate
  887. scsiStatIntermedMet                EQU        $14                    ; Intermediate - Condition Met
  888. scsiStatResvConflict            EQU        $18                    ; Reservation conflict
  889. scsiStatTerminated                EQU        $20                    ; Command terminated
  890. scsiStatQFull                    EQU        $28                    ; Queue full
  891.  
  892. ; SCSI messages
  893. kCmdCompleteMsg                    EQU        0
  894. kExtendedMsg                    EQU        1                    ; 0x01
  895. kSaveDataPointerMsg                EQU        2                    ; 0x02
  896. kRestorePointersMsg                EQU        3                    ; 0x03
  897. kDisconnectMsg                    EQU        4                    ; 0x04
  898. kInitiatorDetectedErrorMsg        EQU        5                    ; 0x05
  899. kAbortMsg                        EQU        6                    ; 0x06
  900. kMsgRejectMsg                    EQU        7                    ; 0x07
  901. kNoOperationMsg                    EQU        8                    ; 0x08
  902. kMsgParityErrorMsg                EQU        9                    ; 0x09
  903. kLinkedCmdCompleteMsg            EQU        10                    ; 0x0a
  904. kLinkedCmdCompleteWithFlagMsg    EQU        11                    ; 0x0b
  905. kBusDeviceResetMsg                EQU        12                    ; 0x0c
  906. kAbortTagMsg                    EQU        13                    ; 0x0d
  907. kClearQueueMsg                    EQU        14                    ; 0x0e
  908. kInitiateRecoveryMsg            EQU        15                    ; 0x0f
  909. kReleaseRecoveryMsg                EQU        16                    ; 0x10
  910. kTerminateIOProcessMsg            EQU        17                    ; 0x11
  911. kSimpleQueueTag                    EQU        $20                    ; 0x20
  912. kHeadOfQueueTagMsg                EQU        33                    ; 0x21
  913. kOrderedQueueTagMsg                EQU        34                    ; 0x22
  914. kIgnoreWideResidueMsg            EQU        35                    ; 0x23
  915.  
  916. ; moveq #kSCSIx, D0;  _SCSIAtomic 
  917. ;
  918. ; pascal OSErr SCSIAction(SCSI_PB *parameterBlock)
  919. ;
  920.     IF ¬ GENERATINGCFM THEN
  921.         ; parameters: 
  922.         ;     parameterBlock    => A0
  923.         ; returns: 
  924.         ;     OSErr             <= D0
  925.         Macro
  926.         _SCSIAction
  927.             moveq    #1,d0
  928.             dc.w     $A089
  929.         EndM
  930.     ELSE
  931.         IMPORT_CFM_FUNCTION    SCSIAction
  932.     ENDIF
  933.  
  934. ;
  935. ; pascal OSErr SCSIRegisterBus(SIMInitInfo *parameterBlock)
  936. ;
  937.     IF ¬ GENERATINGCFM THEN
  938.         ; parameters: 
  939.         ;     parameterBlock    => A0
  940.         ; returns: 
  941.         ;     OSErr             <= D0
  942.         Macro
  943.         _SCSIRegisterBus
  944.             moveq    #2,d0
  945.             dc.w     $A089
  946.         EndM
  947.     ELSE
  948.         IMPORT_CFM_FUNCTION    SCSIRegisterBus
  949.     ENDIF
  950.  
  951. ;
  952. ; pascal OSErr SCSIDeregisterBus(SCSI_PB *parameterBlock)
  953. ;
  954.     IF ¬ GENERATINGCFM THEN
  955.         ; parameters: 
  956.         ;     parameterBlock    => A0
  957.         ; returns: 
  958.         ;     OSErr             <= D0
  959.         Macro
  960.         _SCSIDeregisterBus
  961.             moveq    #3,d0
  962.             dc.w     $A089
  963.         EndM
  964.     ELSE
  965.         IMPORT_CFM_FUNCTION    SCSIDeregisterBus
  966.     ENDIF
  967.  
  968. ;
  969. ; pascal OSErr SCSIReregisterBus(SIMInitInfo *parameterBlock)
  970. ;
  971.     IF ¬ GENERATINGCFM THEN
  972.         ; parameters: 
  973.         ;     parameterBlock    => A0
  974.         ; returns: 
  975.         ;     OSErr             <= D0
  976.         Macro
  977.         _SCSIReregisterBus
  978.             moveq    #4,d0
  979.             dc.w     $A089
  980.         EndM
  981.     ELSE
  982.         IMPORT_CFM_FUNCTION    SCSIReregisterBus
  983.     ENDIF
  984.  
  985. ;
  986. ; pascal OSErr SCSIKillXPT(SIMInitInfo *parameterBlock)
  987. ;
  988.     IF ¬ GENERATINGCFM THEN
  989.         ; parameters: 
  990.         ;     parameterBlock    => A0
  991.         ; returns: 
  992.         ;     OSErr             <= D0
  993.         Macro
  994.         _SCSIKillXPT
  995.             moveq    #5,d0
  996.             dc.w     $A089
  997.         EndM
  998.     ELSE
  999.         IMPORT_CFM_FUNCTION    SCSIKillXPT
  1000.     ENDIF
  1001.  
  1002.     ENDIF ; __SCSI__
  1003.